package removeElements;

public class Solution {
    public class ListNode {
        int val;
        ListNode next;
        ListNode() {}
        ListNode(int val) { this.val = val; }
        ListNode(int val, ListNode next) { this.val = val; this.next = next; }
    }
    public ListNode removeElements(ListNode head, int val) {
        // 删除所有值等于 val的节点
//        if( head == null ) return null;
//        ListNode cur = head;
//        // 为什么使用cur.next呢？因为如果要删除这个节点的话，必须知道上一个节点是谁 所以用cur.next
//        while ( cur.next!=null ) {
//            if( cur.next.val == val ) {
//                cur.next = cur.next.next;
//            } else {
//                cur = cur.next;
//            }
//        }
//        return head.val == val?head.next:head;

//        if ( head == null ) return null;
//        ListNode cur = head.next;
//        ListNode parent = head;
//        while ( cur!=null ) {
//            if( cur.val == val ) {
//                parent.next = cur.next;
//            } else {
//                parent = cur;
//            }
//            cur = cur.next;
//        }
//        return head.val == val? head.next : head;

        // 递归
        if(head == null) {
            return null;
        }
        head.next = removeElements(head.next,val);
        return head.val == val?head.next:head;
    }
}
